/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.util.*;
import persistencia.PersistenciaFactura;

/**
 * Clase que representa una Factura de Alquiler y que hereda de Factura
 * @author JAVA
 */
public final class FacturaAlquiler extends Factura{
    private Cliente cliente;
    private float total;
    private Alquiler alquiler;
    private Empleado dependiente;
    
    //Constructor: los primeros atributos, desde "id" hasta "total" son de la clase Padre
    /**
     * Factura de alquiler 
     * @param cliente
     * @param fecha de la factura
     * @param lista de alquileres asociados a la factura
     * @param dependiente que ha realizado el alquiler
     */
    public FacturaAlquiler(Cliente cliente,Date fecha,Alquiler alq, Empleado dependiente ){
        super(fecha);
        this.cliente=cliente;
        this.alquiler=alq;
        this.dependiente=dependiente;
        calcularTotal();
    }
    /**
     * Factura de alquiler sin dependiente porque ha sido llamada desde el cajero
     * @param cliente
     * @param fecha
     * @param lista 
     */
    public FacturaAlquiler(Cliente cliente,Date fecha,Alquiler alq){
        super(fecha);
        this.cliente=cliente;
        this.alquiler=alq;
        calcularTotal();
    }
    
    //Getter
    
    public Empleado getDependiente() {
        return dependiente;
    }
    
    public Alquiler getAlquiler(){
        return alquiler;
    }

    public Cliente getCliente() {
        return cliente;
    }
    
    //Setter

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public void setDependiente(Empleado dependiente) {
        this.dependiente = dependiente;
    }
    
    public void setAlquiler(Alquiler alq){
        this.alquiler=alq;
    }
   
    
    /**
     * Imprime los diferentes articulos que se encuentran en la lista de alquileres de la factura
     */
    public void imprimirArticulos(){   
        for(ArticuloAlquilado aa:getAlquiler().getListArt()){                                                
            String informacion=aa.toString();
            System.out.println("+++++++++++++++");
            System.out.println(informacion);
            System.out.println("Precio: "+aa.getPrecio());
            Iterator it=aa.getListap().iterator();
            while(it.hasNext()){
                Promocion p=(Promocion)it.next();
                System.out.println("Promocion aplicada: "+p.toString());
            }
            
            
        }
    }
    

    public float getTotal() {
        return this.total;
    }

    
    public void setTotal(float total) {
        this.total=total;
    }

    
    @Override
    public void calcularTotal() {
        Iterator it=getAlquiler().getListArt().iterator();
        while(it.hasNext()){
            ArticuloAlquilado aa=(ArticuloAlquilado)it.next();
            setTotal(total+aa.getPrecio());
        }
    }
    
    
    @Override
    /**
     * Metodo sobreescrito de clase padre (Factura)
     * Imprime una factura con todos sus atributos
     */
    public void imprimirFactura(){
       System.out.println(" ---------------------");
        System.out.println(super.getVideoclub());
        System.out.println(" ");
        System.out.println("+--------------------+");
        System.out.println("|  --- COMPRADOR --- |");
        System.out.println("+--------------------+");
        System.out.println("  Nombre: "+cliente.getNombre()+" "+cliente.getApellidos());
        System.out.println("  NIF: "+cliente.getDni());        
        System.out.println("+---------------------+");
        System.out.println("| ---  ARTICULOS  --- |");
        System.out.println("+---------------------+");
        imprimirArticulos();
        System.out.println("-----------------------");        
        System.out.println("El total es: "+getTotal());
    }

    @Override
    public void insertarFactura() throws Exception {
        if(PersistenciaFactura.insertarFacturaAlquiler(this)!=1){
            throw new ExcepcionPersistencia("Error al insertar la factura");
        }
    }

    

   
    
}
